/*
 * @Author: wuxiangyi
 * @Date: 2023-05-21 21:43:24
 * @LastEditors: wuxiangyi
 * @LastEditTime: 2023-05-26 19:22:36
 * @FilePath: /RSSHub/lib/routes/universities/ncu/jwc.js
 * @Description:
 *
 */
const got = require('@/utils/got');
const cheerio = require('cheerio');
const url = require('url');
const console = require('console');

// 域名
const host = 'http://jwc.ncu.edu.cn';

// 分类
const map = {
    jwtz: '/jwtz',
    yxtz: '/yxtz',
};
// 刚才输入的内容，节约空间，这里就不写出来了

module.exports = async (ctx) => {
    // 这里获取到传入的参数，也就是 /ncu/jwc/:type? 中的 type
    // 通过 || 来实现设置一个默认值
    const type = ctx.params.type || 'jwtz';

    // 要抓取的网址
    const link = host + map[type] + '/index.htm';

    // 获取列表页，也就是发出请求，来获得这个文章列表页
    const response = await got({
        method: 'get',    // 请求的方法是 get，这里一般都是 get
        url: link,        // 请求的链接，也就是文章列表页
    });

    // 用 cheerio 来把请求回来的数据转成 DOM，方便操作
    const $ = cheerio.load(response.data);

    // 提取列表项
    const urlList = $('.font')    // 筛选出所有 class=".font" 的内容
        .find('a')                // 找到所有 <a> 标签，也就是文章的链接
        .slice(0, 10)             // 获取 10 个，也可以把它调大一点，比如 15 个。最大的个数要看这个网页中有多少条
        .map((i, e) => $(e).attr('href'))    // 作为键值对来存储 <a> 标签们的 href 属性
        .get();

    // 设置一下要输出的文章项
    const out = await Promise.all(
        urlList.map(async (itemUrl) => {
            console.log('itemUrl =>', itemUrl);

            itemUrl = url.resolve(host, map[type] + '/' + itemUrl);

            // 这里是使用 RSSHub 的缓存机制
            const cache = await ctx.cache.get(itemUrl);
            if (cache) {
                return Promise.resolve(JSON.parse(cache));
            }

            // 获取列表项中的网页内容，也就是一篇文章
            const response = await got.get(itemUrl);
            const $ = cheerio.load(response.data);

            // single 就是一篇文章了，里面包括了标题、链接、内容和时间
            const single = {
                title: $('TITLE').text(),
                link: itemUrl,
                description: $('.font')
                    .html()
                    .replace(/src="\//g, `src="${url.resolve(host, '.')}`)
                    .replace(/href="\//g, `href="${url.resolve(host, '.')}`)
                    .trim(),
                pubDate: new Date(
                    $('center')
                        .text()
                        .match(/[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}/)
                ).toUTCString(),
            };

            ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60);

            return Promise.resolve(single);
        })
    );

    // 这里就是设置一下 RSS 链接显示的标题了
    let info = '教务通知';
    if (type === 'yxtz') {
        info = '院系通知';
    }

    // 最后设置一下 RSS 链接里面包含的内容，item 就是输出的各个文章项
    ctx.state.data = {
        title: '南昌大学教务处 - ' + info,
        link,
        description: '南昌大学教务处 - ' + info + ' jwc.ncu.edu.cn',
        item: out,
    };
};
